package top.linuyx.mapper;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;
import top.linuyx.pojo.entity.AccountEntity;
import top.linuyx.pojo.param.UserBindEmailParam;
import top.linuyx.pojo.param.UserUpdateParam;

/**
 * @Author Linuyx
 * @Description UserMapper
 * @Date Created in 2021-04-09 9:30
 */

@Repository
public interface UserMapper {

    /**
     * 添加user
     *
     * @param accountId 账户id
     */
    @Insert("insert into user(account_id) values(#{accountId})")
    void insertUser(@Param("accountId") Long accountId);

    /**
     * 根据用户id修改用户信息
     *
     * @param updateParam
     */
    void updateUserById(UserUpdateParam updateParam);

    /**
     * 根据用户id查询图片
     *
     * @param userId 用户id
     * @return 图片
     */
    String getImageById(@Param("userId") Long userId);

    /**
     * 根据用户id修改图片
     *
     * @param userId 用户id
     */
    void updateImageById(@Param("userId") Long userId, @Param("image") String image);

    /**
     * 根据用户名查询密码和随机盐
     *
     * @param username 用户名
     * @return AccountEntity
     */
    @Select("select password,salt from account where username=#{username} and is_deleted=0")
    AccountEntity getAccountByUsername(@Param("username") String username);

    /**
     * 根据用户名修改密码
     *
     * @param username 用户名
     */
    @Update("update account set password=#{password} where username=#{username}")
    void updatePasswordByUsername(@Param("username") String username, @Param("password") String password);

    /**
     * 根据用户名查询用户id
     *
     * @param username 用户名
     * @return 用户id
     */
    Long getIdByUsername(@Param("username") String username);

    /**
     * 根据用户名查询邮箱
     *
     * @param username
     * @return
     */
    String getEmailByUsername(@Param("username") String username);

    /**
     * 查询邮箱是否被绑定
     *
     * @param email 邮箱
     * @return 邮箱
     */
    @Select("select email from user where email=#{email} and is_deleted=0")
    String getEmail(@Param("email") String email);

    /**
     * 绑定邮箱
     *
     * @param bindEmailParam 绑定邮箱请求体
     */
    @Update("update user set email=#{email} where id=#{userId}")
    void bindEmail(UserBindEmailParam bindEmailParam);

}
